“我的代码正在被千百万人使用”,MySQL 之父等六大国际数据库掌门人谈如何做数据库!
都说互联网是有记忆的,殊不知强大的记忆力的背后是一个名为数据库的东西在默记,将散是满天星、亦或纷纷残叶满阶头的凌乱信息以各种形态永留存在互联网这张网上。放眼全球数据库形态的发展,彼时数据库开拓者之一的 Michael Stonebraker 用一篇《What Goes Around Comes Around》(https://people.cs.umass.edu/~yanlei/courses/CS691LL-f06/papers/SH05.pdf)经典论文,横跨 35 年,从层级数据模型 IMS 到网络数据模型 CODASYL、关系数据模型、实体-关系数据模型、拓展的关系数据模型、语义数据模型、面向对象数据模型、对象-关系数据模型再到半结构化数据模型九个不同的时期,也只是在数据库长河中画上一个逗号。
几经迭代,数据库行业在当下迎来了百花齐放百家争鸣之盛况,也诞生了诸多成功的数据库和数据分析产品,如 MySQL、PostgreSQL、MongoDB、Elasticsearch、Neo4j、ClickHouse。不过,在这些活跃于一线的国际数据库掌门人看来,数据库行业近些年间并没有太多新的革命发生,更多的是在以过去不同的数据模型为理论的基础上,结合了现代的新算法与新需求,才使得数据库再次有了进化。
在此之下,数据库的创新该从何谈起?这些主流的数据库是怎么做的?在云原生时代下,它们又会有哪些意想不到的机遇?2021 长沙·中国 1024 程序员节大会上,在 CSDN 副总裁邹欣的主持下,MySQL 之父、MariaDB 创始人 Michael "Monty" Widenius,PostgreSQL 全球开发组联合创始人Bruce Momjian,MongoDB CTO Mark Porter,Elastic 创始人兼 CEO Shay Banon,Neo4j 联合创始人兼 CEO Emil Eifrem,ClickHouse 创始人 Alexey Milovidov 齐聚线上,展开了一场关于数据库技术发展未来的尖峰对话。
以下为对话全文:
没有革命性变化的数据库正在进化
邹欣:过去两年里,数据库开发领域发生了哪些变化?如果用关键词来概括,大家会用什么词?
Shay Banon(Elasticsearch):在从事软件行业的 20 多年间,我认为该行业并没有产生革命性的变化,反而是发生了一些进化,这是令人兴奋的事情。
我们今天见到的许多事物其实都曾在历史上发生过,例如时下一些主流的核心算法实则早已诞生。不过,如今数据存储和数据库所要面临的一部分重要进化在于它们需要处理的数据规模日益庞大。然而,要处理呈现指数级增长的大规模数据是非常困难的,而我们的产品 Elasticsearch 之所以能在市场上大放光彩,主要原因就是其能够处理海量数据。
另外,我认为与数据规模强相关的是数据的整洁度。掌握的数据越多,数据类型也会越多,包括有结构、非结构、文本、数字以及从各种渠道收集到的数据,这些数据都有不同的属性和功能,也容易造成对数据的定义混乱。由此,我们也需要能够应对数据快速变化的工具。
近两年,我们正处于数据存储能力不断发展和创新的趋势中。个人而言,我希望 Elasticsearch 在 10 年、20 年后仍然可以不掉队,因为我们在当下这股趋势中保持创新,并让 Elasticsearch 在未来仍然能够满足人们的需求。
Mark Porter(MongoDB):我也赞同 Shay 所说的数据库行业并没有多少新的革命发生的观点。过去人们谈论较多的是要上云,现在大多数人都已在云上,如今他们更需要的是实现一些非功能性需求,如安全性、耐用性、正确性、可伸缩性、可用性等能力。这些能力成为了现在各家决胜的关键,这也是数据库领域在过去几年里发生的变化方向。
关于这一点,简单来看,在满足海量数据的同时,降低运营负担与成本,让开发者更容易开发,也是我们必须要做的事情。
与此同时,另一个重要的变化是历史上非结构化数据和结构化数据的比例一直是 8:2,但根据最新的研究发现,过去 5 年中,这一比例达到了 9:1。越来越多的实体和纯数据非结构化的比例正在变得越来越高,这也要求我们必须要通过数据存储、数据应用程序和平台将所有这些数据无缝地融合在一起。亦或者说,如果只是要求每个开发者将所有这些东西拼凑在一起,这是没有效率的。
Alexey Milovidov(ClickHouse):近几年,数据库技术的主要趋势变得越来越“平易近人”,开源数据库越来越多,开源数据库技术的数量也在增加。一定情况下,开源甚至能取代相应的闭源项目。
同时,整个行业对数据处理的需求也在增加,因为每家公司都有数据,每家公司都需要对数据进行分析从而保证自己的竞争力,使用者还希望这些技术更加简单,可以快速上手及易于使用,如何兼顾技术和易于使用的体验,是一项巨大的挑战。
Bruce Momjian(PostgreSQL):当身处一个已发展 35 年项目中时,你就不太会以两年的时间跨度去思考问题。
随着数据库的发展,当前我们已经意识到这个领域有一些基础性的东西缺失了,如大规模并行处理。以 PostgreSQL 为例,我们之前提出了分片功能的想法,即允许 PostgreSQL 多主机运行,包括中国市场对这块也颇为关注。关于这一点,我们在刚刚发布的 PostgreSQL 14 上更新了分片应用,但是它现在还不具备同时读写的能力,只能处理只读,不过基于此,我看到这个领域中正在发生的迭代也仍然非常兴奋。
另一个重要的事情是对所有存储在数据库中数据进行加密的数据透明化的需求。全球对于安全问题关注越来越高的原因在于我们无法想象如今会有那么多的勒索软件出现,很多公司尤其是大企业成为了这些软件的受害者。因此,我们看到更多人对在文件系统中存储数据的加密文件是否透明和其他安全功能越来越关注。
过去两年间,大规模并行处理和安全性是我们最为重要的两件事。
Emil Eifrem(Neo4j):放眼数据库领域,该市场正成为企业软件中最大的市场,目前市场体量大约是 500 亿美元,预计未来 4~5 年内将增长到 1000 亿美元,这是很不寻常的。它正在以 5%-6% 的速度增长了很多年,早已成为一个成熟的市场,现在又呈现爆炸式增长,我认为重要的原因有三:
融合
第一点之所以是融合,是因为过去我们的选择有很多,最基础的是关系型数据库,它是数据库中坚实的基础,会存在很长一段时间。现在出现了四个新的现代数据库类别,包括文档数据库、图数据库、时间序列数据库、NewSQL 数据库,预计到 2030 年,会持续存在的将会是这四个新的数据库类别。当初数据库爆炸式发展初期出现了 350 多种类型,时下正在融合四种新的类别,这对开发者来说无疑是福音,只需要学习四个数据库种类就可以了。
向云的转变
第二个是向云转移,这是行业发展的普遍的趋势。不过,想要触及到数据层却没有那么快,不过这在 2018 年前后实现了。彼时,大型云平台和一些独立云平台开始迅猛增长,期间虽受到了监管等因素阻碍,但后来它真的起飞了,实现了向云转变。
数据科学家的崛起
一般而言,数据科学家都不喜欢数据库,这让我这个数据库的创始人觉得很奇怪,因为他们喜欢数据更甚于喜欢数据库。他们从书库中获取数据并放入机器学习流水线中,在图数据库 Neo4j 中,他们将数据放入 Neo4j 可以使用图形算法,然后通过图和床把它放回机器学习流水线中,所以 Neo4j 成为了所有这些机器学习流水线的重要部分,因为它为机器学习的模型提供了关系作为预测的信号,所以数据科学家使用数据库的数量越来越多。
以上也是我认为过去两年间,数据库发生的三大转变。
Michael "Monty" Widenius (MySQL):5-7 年前学习 NoSQL 是一种趋势,因为彼时人们发现 SQL 很复杂,有很多东西要学。如果只进行简单的存储和最简单的查找,使用 NoSQL 会容易得多。因此,很多公司都是在 NoSQL 之上创建的,有些很成功,有些则没有,因此我们也发现不是在所有情况下都能够使用 NoSQL。因此,当创建一家公司或某家公司有数据库需求时,你要考虑的是至少要拥有一个关系型数据库,也要有 NoSQL,有了 NoSQL 公司才能生存。
此外,另一个趋势是有很多新的数据库涌现出来并声称自己是云原生,而在现实中并没有太多新的东西,他们仍然无法同时为写入和表格关联进行扩容。我认为在当前的行业和环境中,你需要的是既可以在云中运行,也可以在本地运行。因为大多数大公司仍然是在自己的私有环境中运行,即使如此,他们也会去模拟公有云的范式。对此,我认为不要被一家云服务商绑定,你需要设计自己的产品,让它既可以在本地也可以在云端运行。
云原生对于数据库而言,究竟意味着什么?
邹欣:很多年来,人们都在谈论云,现在还有另一个词叫做“云原生”,有人说我们本身就是云原生,没有桌面环境和离线环境之分,这对数据库来说意味着什么?在数据库领域云原生的定义是什么?
Alexey Milovidov(ClickHouse):理想状态下,技术应该很容易集成到云上以及在云上进行管理。此外,云原生必须可以利用许多不同云技术的功能,而这些功能与具体的云平台无关,无论是 AWS 或阿里云。技术的使用者不应该担心基础架构,理想情况下,用户甚至连虚拟机的配置和集群配置都不要担心。他们只用随时随地存储和处理数据就行。
Shay Banon(Elasticsearch):在数据库方面,我认为云原生技术的应用有两个层面需要考虑,一是确保操作的简单性以及新的功能,如自动扩展能力或基于负载而变化的能力等。CNCF(云原生计算基金会)旗下的 Kubernetes 项目,人们把它视为云原生技术。我告诉大家一个秘密,你可以把 Kubernetes 放在硬件上运行,如果你愿意,你也可以在服务器上运行它,但是我们在 Kubernetes 上运行软件需要提供云原生的体验,这很有道理。
另一部分可能是很多人此前并不太关心的方面,但这些在云原生技术背景下变得至关重要,这种现象被称之为“近期偏差”。在 Elasticsearch 的工程中为了实现更好的压缩,我们投入了很大的努力,因为数据要在机器、节点和客户端之间进行传输数据。过去当我们看到安装没有在云中进行的时候,并不觉得这是个障碍,因为人们在服务器端运行的时候有自己的空间,但当在云上进行部署并运行时,数据压缩和数据传输瞬间就变得至关重要,尤其是在稳定部署方面。
Mark Porter(MongoDB):我希望我能做一位比现在年轻 30 岁的开发者。今天可用框架、服务、选项的数量都是非常惊人的,这也让时下的公司不能仅是依赖于做普通的事情,他们必须带来与众不同的创新。
那么,该如何实现创新?
只能通过开发者来实现。这些创新是由开发者在每个层级都选择最佳的方案来实现的,他们应该选择最好的云、最好的数据库、最好的搜索引擎、最佳的应用框架。通过这样做,他们可以越来越快地推动他们的公司和项目向前发展,这就是我认为企业可以从云原生中获益的地方。
云原生革命就是让开发者选择最好的软件并成为该软件的专家。
Bruce Momjian(PostgreSQL):从 1970 年以来,我们所开发的 PostreSQL 关系模型中最“奇怪”的部分在于新技术不断地涌现,而我们似乎并没有因为新技术的诞生而做出大的改变。
举个例子,10 年前 SSD 固态硬盘的出现,让随机访问和顺序访问的速度一样快,你可能觉得这会极大地影响数据库底层的设计。当时,我们有很多的算法,但不免仍然会非常焦虑,我猜在相关的数据库中,随机访问会很慢。但当 SSD 真的出现时,我们真正需要做的是增加了以更细粒度、设置 random_page_cost 参数的能力。如今十年过去了,我们依然没有必要去做更多的事情,因为我们已经提供了这个设置。现在开发者可以从不同的设备、不同的来源中设置 random_page_cost,这样就搞定了。
因此,云的出现与 SSD 如出一辙,我们针对特定云服务商提供了一些版本,如阿里云、AWS,但对我来说有趣的是,我们在数据库管理和扩展数据库方面的确做了一些小的调整,也在一些方面利用了云和一些新技术的优势,但在大的方面并没有做太多改变。
Emil Eifrem(Neo4j):站在应用开发者的角度来看,开发者可能会认为当你需要换平台时,正是可以仔细审视自己的开发实践和技术栈的时机。这对于曾经从大型机转向主从式架构,或者从主从式架构转向 Web 时的我们而言,并不陌生。在我们现在的行业里,有两大比较大的开发平台迁移,也说不定还有第三个,一是向移动互联网的转变,二是向极富争议的基于加密协议的开发转变,比如区块链。
如果第三次转变是向云的转变那就太棒了,基于此,开发者可以看到在这种新的基础上构建应用程序是什么样子的,这是一个很好的机会。我认为向云的转变带来了一组非常有趣的架构模式,这种架构模式围绕着微服务和容器、Serverless,也围绕着作为功能即服务的 Lambda 架构,在理论上这可以称之为主从架构模型,但实际上现在可能还做不到这点,不过,我认为这是非常重要的。
倘若回到学生时代,你会如何学习数据库?
邹欣:对于想要学习数据库的群体而言,怎样才能有效地学习?
Shay Banon:首先这不是一个容易回答的问题,因为没有一种方法或一种产品对大家是最好的或应该去学习的。所以我有两个想法:
第一点,如果你是个初级开发者,在进入开发领域时,试着去找那些工作了好几年的人去聊聊,与他们交谈,询问他们的建议,譬如决策是怎么做出的、为什么选择了某技术等等,这些人可能在你的项目或团队中,他们很可能非常愿意帮助你。
第二点,保持好奇心。当下的技术发展很快,在你去学习某样东西时,不是出于被迫,而是因为它很有趣,你喜欢这样做,我认为这很重要。如果找到了学习的乐趣,学习什么并不重要重要的是你想学,我认为这对于你职业生涯的开局是非常好的。
整体而言,我认为在今天选择的空间比以往更大,但不必样样都学,只要你有好奇心以及学习的兴趣,再找到一个团队,自然就已经找到了一个小的问题集,由此,你只要集中精力去帮助团队解决问题就好了。
Mark Porter:在职业生涯早期的人,大家要明白深入某些事情的意义,明白在某件事上成为最好的人是什么感觉。
正如 Shay 所言,当创业公司寻找人才时,当企业招人来启动一个新项目时,他们所寻找的是能够深入到项目中,并表现出色的人。我有五个孩子,我为此非常骄傲,他们每个人都在某些方面十分优秀,但他们每个人都不一样,只有一个人喜欢计算机,这点我很欣慰。
我给开发者的建议与 Shay 说的相似,一定要搞清楚为什么做这个决策,深入学习与思考,保持好奇心,这可能是让你在事业上取得成功的最重要的事情。
邹欣:所以要真正理解别人选择背后的原因,而不是简单的去重复别人的选择,要理解他们决策的过程。
Alexey Milovidov:一个简单的建议,永远不要停止学习,永远不要停止技术实践。
Bruce Momjian:对于学生来说,我肯定会质疑你在学校学的东西是否可以与行业的进展相匹配。如果无法匹配,那么你就需要标明,并且说“嘿,我知道我们需要它!”
我发现学术圈对于新的工作方法和新的技术不是那么开放,要知道数据库和开源是最好的学习教材,它不仅让人可以使用数据库而且可以深度查看数据库的原理 了解优化器、存储系统以及索引的工作方式,基于此,你可以对它有更深的理解,且达到一个在之前的数据库中无法达到的程度。如果我们走进美国和欧洲的一所大学,他们通常仍然在使用专有的关系型数据库,因为教授不愿意学习新的东西,他们不愿意更多学习。
Emil Eifrem:首先第一部分,一定要重视计算机科学的基础知识,就是会在学校里学到的内容,比如数据结构和算法、如何写出整洁的代码,这些东西才是真正有价值的。
第二部分,你要去写代码。我们生活在一个开源的世界里,你可以接触到很多不同的东西,尤其是在云上。作为学生,大家甚至可以免费使用或者用学生价使用,去干就完了,写代码的好处是无法被取代的这是根基,是我们要做的。
我想如果我是学生,我可能会聚焦在三个方面:
第一个是具有容器的现代架构、 Serverless 的微服务、功能即服务、Lambda 架构;
第二个,我会确保把一个云学得很好,可以是阿里云或 GCP(Google Cloud Platform),要对它们的服务非常了解,要知道它们希望你如何编写程序,你不必全部遵守这些要求但至少应该了解;
第三个是需要去学习在数据库领域中已经稳定的东西。现代数据库有 4 个领域,即文档数据库、图数据库、时间序列数据库和 NewSQL 数据库,挑其中的一个去学吧。我认为图数据库非常棒,因为它可以让你深入到数据科学和机器学习中,但不要只学习图数据库,你应该对所有类型都比较熟悉,但你不用成为专家。
如果我是学生,我会这样学习。
Michael "Monty" Widenius:从开源数据库开始学习,是最简单的,因为此时的你,不用成为别人眼中的专家,也不用为找好工作而犯愁,学习数据库只是因为你喜欢并且通过一个良好的环境去提升技术。如果是这样,你就可以去做计划了,但你也需要了解人们的需求是什么,你可以通过与你的同事聊天聊天、了解他们解决数据库中的某个具体的问题,你也可以在数据库上进行开发的同时公开提交你的项目,这对职业生涯的起步来说是比较简单的。
你可以证明:看,我的代码正在被千百万人所使用!
比起“我能做某事”,这是个高得多的标准。同时,你也可以成为项目的一部分,这也表明你可以灵活工作,也可以和其他人一起工作等,这对公司想要招聘的程序员来说非常重要。